import java.util.Arrays;

public class Test {
    //解法一，原地移动
    public void moveZeroes(int[] nums) {
        int left=0,right=0;
        while(right<nums.length){
            if(nums[right]!=0){
                nums[left]=nums[right];
                left++;
            }
            right++;
        }
        while(left<nums.length){
            nums[left]=0;
            left++;
        }
    }
//解法二，使用swap进行交换
    public void moveZeroes2(int[] nums){
        int left=0,right=0;
        while(right<nums.length){
            if(nums[right]!=0){
                swap(nums,left,right);
                left++;
            }
            right++;
        }
    }
    private void swap(int[] nums,int left,int right){
        int temp=nums[left];
        nums[left]=nums[right];
        nums[right]=temp;
    }

//解法三，使用Arrays.fill进行填充
    public void moveZeroes3(int[] nums){
        int index=0;
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=0){
                nums[index]=nums[i];//填充
                index++;//下标右移
            }
        }
        while(index<nums.length){//填充剩余的0
            nums[index]=0;//填充0
            index++;//下标右移
        }
        Arrays.fill(nums,index,nums.length,0);//填充剩余的0
    }
public static void main(String[] args) {
    int[] nums = {0,1,0,3,12};
    Test test = new Test();
    test.moveZeroes3(nums);
    System.out.println(Arrays.toString(nums));
    }
}
